package com.sskj.gateway.protocol;

import com.sskj.protocol.IProtocol;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Component
@Slf4j
public class ProtocolRegistry {

    private final Map<String, IProtocol> protocolMap = new ConcurrentHashMap<>();

    /**
     * 注册协议
     * @param code 编码
     * @param protocol 协议实现
     */
    public <T> void register(String code, IProtocol protocol) {
        protocolMap.put(code, protocol);
    }

    /**
     * 根据CODE获取协议处理器
     * @param code 设备CODE
     */
    public IProtocol getProtocol(String code) {
        return protocolMap.get(code);
    }

    /**
     * 检查是否支持该协议
     * @param code 协议code
     * @return 存在返回true，不存在返回false
     */
    public boolean supports(String code) {
        return protocolMap.containsKey(code);
    }

    /**
     * 获取注册的协议数量
     * @return int
     */
    public int size() {
        return protocolMap.size();
    }
}
